package com.xoa.service.hr.hrEvaluate;

import com.xoa.dao.hr.hrEvaluate.HrEvaluatePrivMapper;
import com.xoa.model.hr.hrEvaluate.HrEvaluatePrivWithBLOBs;
import com.xoa.service.department.DepartmentService;
import com.xoa.service.users.UsersService;
import com.xoa.util.ToJson;
import com.xoa.util.common.StringUtils;
import org.apache.commons.collections4.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

@Service
public class HrEvaluatePrivService {

    @Autowired
    private HrEvaluatePrivMapper hrEvaluatePrivMapper;

    @Autowired
    private UsersService usersService;

    @Autowired
    private DepartmentService departmentService;

    /**
     * @作者 廉立深
     * @时间 2020-08-18
     * @方法介绍 判断是否有权限
     */
    public boolean isPriv(Map map){
        Integer integer = hrEvaluatePrivMapper.countIsPriv(map);
        if (integer != null && integer > 0){
            return true;
        }
        return false;
    }

    /**
     * 作者 廉立深
     * 日期 2020/8/20
     * 方法介绍  判断当前登陆人是否可以查看其他人的权限   返回String类型的集合
     * 参数 [map]
     * 返回 java.util.List<java.lang.String>
     **/
    public Set<String> isUserPriv(Map map) {
        Set set = new HashSet();
        List<HrEvaluatePrivWithBLOBs> userPriv = hrEvaluatePrivMapper.isUserPriv(map);
        userPriv.forEach(item -> {
            String privUsers = item.getPrivUsers();
            String privDepts = item.getPrivDepts();

            //人员
            if (!StringUtils.checkNull(privUsers)){
                String[] split = privUsers.split(",");
                List<String> strings = Arrays.asList(split);
                set.addAll(strings);
            }

            //部门
            if (!StringUtils.checkNull(privDepts)){
                String[] split = privDepts.split(",");
                for (String depId : split) {
                    List<String> privDept = hrEvaluatePrivMapper.getPrivDept(depId);
                    set.addAll(privDept);
                }
            }
        });
        return set;
    }

    /**
     * 作者 廉立深
     * 日期 2020/8/19
     * 方法介绍  查询方法
     * 参数 [request, hrEvaluatePrivWithBLOBs]
     * 返回 com.xoa.util.ToJson
     **/
    public ToJson findHrEvaluatePriv(HttpServletRequest request, HrEvaluatePrivWithBLOBs hrEvaluatePrivWithBLOBs) {
        ToJson toJson = new ToJson(1,"false");
        try {
            Map map = new HashedMap();
            map.put("privId",hrEvaluatePrivWithBLOBs.getPrivId());
            List<HrEvaluatePrivWithBLOBs> hrEvaluatePriv = hrEvaluatePrivMapper.findHrEvaluatePriv(map);
            for (HrEvaluatePrivWithBLOBs hrEvaluatePrivw:hrEvaluatePriv) {

                //查看或评价人
                if (!StringUtils.checkNull(hrEvaluatePrivw.getViewOrEvaluateUsers())){
                    hrEvaluatePrivw.setViewOrEvaluateUserNames(usersService.getUserNameById(hrEvaluatePrivw.getViewOrEvaluateUsers()));
                }

                //被查看或被评价人
                if (!StringUtils.checkNull(hrEvaluatePrivw.getPrivUsers())){
                    hrEvaluatePrivw.setPrivUserNames(usersService.getUserNameById(hrEvaluatePrivw.getPrivUsers()));
                }

                //被查看或被评价部门
                if (!StringUtils.checkNull(hrEvaluatePrivw.getPrivDepts())){
                    hrEvaluatePrivw.setPrivDeptNames(departmentService.getDpNameById(hrEvaluatePrivw.getPrivDepts()));
                }

            }
            toJson.setObj(hrEvaluatePriv);
            toJson.setFlag(0);
            toJson.setMsg("ok");
        }catch (Exception e){
            e.printStackTrace();
            toJson.setMsg(e.getMessage());
        }
        return toJson;
    }

    /**
     * 作者 廉立深
     * 日期 2020/8/19
     * 方法介绍  新增方法
     * 参数 [request, hrEvaluatePrivWithBLOBs]
     * 返回 com.xoa.util.ToJson
     **/
    public ToJson insertHrEvaluatePriv(HttpServletRequest request, HrEvaluatePrivWithBLOBs hrEvaluatePrivWithBLOBs) {
        ToJson toJson = new ToJson(1,"false");
        try {
            toJson.setObject(hrEvaluatePrivMapper.insertSelective(hrEvaluatePrivWithBLOBs));
            toJson.setFlag(0);
            toJson.setMsg("ok");
        }catch (Exception e){
            e.printStackTrace();
            toJson.setMsg(e.getMessage());
        }
        return toJson;
    }

    /**
     * 作者 廉立深
     * 日期 2020/8/19
     * 方法介绍  编辑方法
     * 参数 [request, hrEvaluatePrivWithBLOBs]
     * 返回 com.xoa.util.ToJson
     **/
    public ToJson editEvaluatePriv(HttpServletRequest request, HrEvaluatePrivWithBLOBs hrEvaluatePrivWithBLOBs) {
        ToJson toJson = new ToJson(1,"false");
        try {
            toJson.setObject(hrEvaluatePrivMapper.updateByPrimaryKeySelective(hrEvaluatePrivWithBLOBs));
            toJson.setFlag(0);
            toJson.setMsg("ok");
        }catch (Exception e){
            e.printStackTrace();
            toJson.setMsg(e.getMessage());
        }
        return toJson;
    }

    /**
     * 作者 廉立深
     * 日期 2020/8/19
     * 方法介绍  删除接口
     * 参数 [request, hrEvaluatePrivWithBLOBs]
     * 返回 com.xoa.util.ToJson
     **/
    public ToJson delEvaluatePriv(HttpServletRequest request, HrEvaluatePrivWithBLOBs hrEvaluatePrivWithBLOBs) {
        ToJson toJson = new ToJson(1,"false");
        try {
            toJson.setObject(hrEvaluatePrivMapper.deleteByPrimaryKey(hrEvaluatePrivWithBLOBs.getPrivId()));
            toJson.setFlag(0);
            toJson.setMsg("ok");
        }catch (Exception e){
            e.printStackTrace();
            toJson.setMsg(e.getMessage());
        }
        return toJson;
    }


}
